package pfc.aviloc.aplicacion.citas_medico;

import java.io.IOException;
import java.util.Formatter;

import pfc.aviloc.R;
import pfc.aviloc.comunicacion.Comunicacion;
import pfc.aviloc.configuracion.ConfiguracionPreferenceActivity;
import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.TimePickerDialog;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.TimePicker;

public class CitasMedicoModificarActivity extends Activity {
		
	// *******************************
	// Variables
	// *******************************
	private Button botonCMVolver;
	private Button botonCMModificar;
	
	private TextView formulario_cita_fecha;
	private int ano_cita;
	private int mes_cita;
	private int dia_cita;
	static final int DATE_DIALOG_ID = 0;

	private TextView formulario_cita_hora;
	private int hora_cita;
	private int min_cita;
	static final int TIME_DIALOG_ID = 1;
	// *******************************
	// Metodos
	// *******************************	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		//Log.i("INFO", "--<-<-<-<--< 1");
		setContentView(R.layout.citas_medico_modificar_cita_xml);
			
		botonCMVolver  = (Button) findViewById(R.id.cm_modificar_boton_volver_id);
		botonCMModificar  = (Button) findViewById(R.id.cm_modificar_boton_modificar_cita_id);
		
		botonCMVolver.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				Intent intent = new Intent();
				intent.setClass(CitasMedicoModificarActivity.this, CitasMedicoActivity.class);
				startActivity(intent);
				finish();
			}
		});
		botonCMModificar.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				
		 		if (comprobarConexion()) {
		 			boolean datosEnviados = enviarDatosCitaServidor();
		 		} else {
		 			boolean datosEnviosAlmacenados = almacenarEnvioDatosCita();
		 		}
		 		
				Intent intent = new Intent();
				intent.setClass(CitasMedicoModificarActivity.this, CitasMedicoActivity.class);
				startActivity(intent);
				finish();
			}
		});
		
		formulario_cita_fecha = (TextView) findViewById(R.id.cm_modificar_cita_fecha_id);
		formulario_cita_fecha.setOnTouchListener(new OnTouchListener() {
			public boolean onTouch(View v, MotionEvent event) {
				showDialog(DATE_DIALOG_ID);	
				return false;
			}
		});
		
		formulario_cita_hora = (TextView) findViewById(R.id.cm_modificar_cita_hora_id);
		formulario_cita_hora.setOnTouchListener(new OnTouchListener() {
			public boolean onTouch(View v, MotionEvent event) {
				showDialog(TIME_DIALOG_ID);	
				return false;
			}
		});
		
        Bundle bundle=getIntent().getExtras();
        String idCita = bundle.getString("id_cita");
		// recuperamos los datos de la base de datos. 
		CitasMedico citaMedico= obtenerCitaMedicoBD(idCita);
		ano_cita = new Integer(citaMedico.getFecha_ano());
		mes_cita = (new Integer(citaMedico.getFecha_mes()))-1;
		dia_cita = new Integer(citaMedico.getFecha_dia());
		hora_cita = new Integer(citaMedico.getHora().substring(0,2));
		Log.i("info","--------------->HORA ="+ hora_cita);
		min_cita = new Integer(citaMedico.getHora().substring(3));
		mostrarDatosCita(citaMedico);

	}
	
	private void mostrarDatosCita(CitasMedico datosCita){		
		//********************************
		// Variables
		// *******************************
		EditText textViewFecha = (EditText) findViewById(R.id.cm_modificar_cita_fecha_id);
		EditText textViewHora = (EditText) findViewById(R.id.cm_modificar_cita_hora_id);
		EditText textViewMedico = (EditText) findViewById(R.id.cm_modificar_cita_medico_id);
		EditText textViewEspecialidad = (EditText) findViewById(R.id.cm_modificar_cita_especialidad_id);
		EditText textViewConsulta = (EditText) findViewById(R.id.cm_modificar_cita_consulta_id);
		EditText textViewHospital = (EditText) findViewById(R.id.cm_modificar_cita_hospital_id);
		EditText textViewDireccion = (EditText) findViewById(R.id.cm_modificar_cita_direccion_id);
				
		textViewFecha.setText(datosCita.getFecha());
		textViewHora.setText(datosCita.getHora());
		textViewMedico.setText(datosCita.getMedico());
		textViewEspecialidad.setText(datosCita.getEspecialidad());
		textViewConsulta.setText(datosCita.getConsulta());
		textViewHospital.setText(datosCita.getHospital());
		textViewDireccion.setText(datosCita.getDireccion());
	}
	
	private CitasMedico obtenerCitaMedicoBD(String idCita){
		CitasMedicoBD cmBD = new CitasMedicoBD(this, this.getString(R.string.cm_bd_nombre_base_datos), null, this.getResources().getInteger(R.integer.cm_bd_version));
		CitasMedico datos = cmBD.recuperarBD(idCita);
		
		return datos;
	}
	
	private void insertarFechaEnFormulario() {
	    formulario_cita_fecha.setText(
	        new StringBuilder()
	        //Constant Month is 0 based so we have to add 1
	       .append(dia_cita).append("-")
	       .append(mes_cita+1).append("-")
	       .append(ano_cita).append(" "));
	}
	private DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() {
		public void onDateSet(DatePicker view, int yearOf, int monthOfYear, int dayOfMonth) {
	            ano_cita = yearOf;
	            mes_cita = monthOfYear;
	            dia_cita = dayOfMonth;
	            insertarFechaEnFormulario();//Show the date on the TextView
	     }
	};
	
	private void insertarHoraEnFormulario() {
    	Formatter fmt = new Formatter();
        String minuto = ""+fmt.format("%02d",min_cita);
        
        formulario_cita_hora.setText(
	        new StringBuilder()
	        //Constant Month is 0 based so we have to add 1
	       .append(hora_cita).append(":")
	       .append(minuto).append(" "));
	       
	}
	private TimePickerDialog.OnTimeSetListener mTimeSetListener = new TimePickerDialog.OnTimeSetListener() {
		
		public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
			hora_cita = hourOfDay;
			min_cita = minute;
			insertarHoraEnFormulario();			
		}
	};
	
	@Override
	protected Dialog onCreateDialog(int id) {
	    switch (id) {
	         case DATE_DIALOG_ID:
	             return new DatePickerDialog(this, mDateSetListener, ano_cita, mes_cita, dia_cita);
	         case TIME_DIALOG_ID:
	        	 return new TimePickerDialog(this, mTimeSetListener, hora_cita, min_cita, true);
	     }
	     return null;
	}
		
	private boolean enviarDatosCitaServidor(){
		// TODO: esta funcion va a recuperar los datos del formulario y los enviara al servidor
		return false;
		/*
		DatosPersonales returnDatos = null;
		InputSource respuestaXMLInputSource = null;
		
		try {
			//Comunicacion.inicializarComunicacion(this.getResources().getInteger(R.integer.TIME_OUT_COMUNICACION));
	//			res = Comunicacion.getXML("http://localhost:8080/PFC_aviso_localizacion/index.mvl");
	//			res = Comunicacion.getXML("http://127.0.0.1:8080/PFC_aviso_localizacion/index.mvl");
			//res = Comunicacion.getXML("http://192.168.186.16:8080/PFC_aviso_localizacion/index.mvl");
			
			Map<String, String> kvParameters = new HashMap<String, String>();
			String key = getString(R.string.dp_clave_param_idUsuario);
			String valor = ConfiguracionPreferenceActivity.getIdUsuario(this);
			kvParameters.put(key, valor);	
			
			String url = ConfiguracionPreferenceActivity.getDireccionServidor(this)+ getString(R.string.dp_url_datos_personales);
			
			// llamamos al servidor por la url y pasandole el id del usuario: recibiendo un inputsource para parsear.
			respuestaXMLInputSource = Comunicacion.getXML(url, kvParameters);
			
			DatosPersonalesParseador  dpParseador = new DatosPersonalesParseador(this);
			returnDatos = dpParseador.getDatosPersonales(respuestaXMLInputSource);
			
//			if (returnDatos == null) {
//				boolean error = dpParseador.error;
//				String tipoError = dpParseador.tipoError;
//			}
			
			Date fechaActual = new Date();
			returnDatos.setFechaActualizacion( fechaActual.getDate()+"-"+(fechaActual.getMonth()+1)+"-"+(fechaActual.getYear()+1900)+" "+fechaActual.getHours()+":"+fechaActual.getMinutes());
			dpParseador = null;
		} catch (Exception e) {
			returnDatos = null;
		}
		return returnDatos;
		*/
	}	
	
	private boolean almacenarEnvioDatosCita() {
		return false;
		// TODO: Esta funcion en caso de no exixtir conexion, va a almacenar los datos para enviarlos mas tarde.
	}
		
	private boolean comprobarConexion() {	
		String urlString = ConfiguracionPreferenceActivity.getDireccionServidor(this);
		int timeOut = this.getResources().getInteger(R.integer.TIEMPO_DEL_SPLASH);
		try {
			return Comunicacion.doPing(urlString, timeOut);
		} catch (IOException e) {
			e.printStackTrace();
			return false;
		}
	}

}
